#include<unistd.h>
#include<signal.h>
#include<iostream>
using namespace std;

//int flag=0;
volatile int flag=0;

void handler(int signo)
{
    cout<<"catch a signal"<<signo<<endl;
    flag=1;
}

int main()
{
    signal(2,handler);
    //检测到flag在main这个栈帧中没有修改，且!flag是一种计算
    //在优化条件下，flag变量 可能 被直接优化到cpu内的寄存器中 不在访问内存 内存中的flag改了，不影响
    //while 循环检查的ﬂag，并不是内存中最新的ﬂag，这就存在了数据二异性的问题
    while(!flag);

    cout<<"process quit normal"<<endl;
    return 0;
}